package br.gov.sedurb.ws.client;


import br.gov.se.seplag.RequestFixo;
import br.gov.se.seplag.ebo.v1.CarteiraIdentidade;
import br.gov.se.seplag.ebo.v1.CarteiraPasseLivre;
import br.gov.se.seplag.ebo.v1.CategoriaCarteiraPasseLivre;
import br.gov.se.seplag.ebo.v1.TipoCarteiraPasseLivre;
import br.gov.se.seplag.passelivre.ErroInfoMessage;
import br.gov.se.seplag.passelivre.ParametroCadastrarPasseLivre;
import br.gov.se.seplag.passelivre.ParametroCancelarPasseLivre;
import br.gov.se.seplag.passelivre.ParametroConsultarPasseLivre;
import br.gov.se.seplag.passelivre.PasseLivre;
import br.gov.se.seplag.passelivre.PasseLivre_Service;
import br.gov.se.seplag.passelivre.ResultadoCadastrarPasseLivre;
import br.gov.se.seplag.passelivre.ResultadoCancelarPasseLivre;
import br.gov.se.seplag.passelivre.ResultadoConsultarPasseLivre;

import br.gov.sedurb.util.JSFUtils;

import java.math.BigInteger;

import java.util.ArrayList;
import java.util.List;

import javax.xml.ws.WebServiceRef;


// !THE CHANGES MADE TO THIS FILE WILL BE DESTROYED IF REGENERATED!
// This source file is generated by Oracle tools
// Contents may be subject to change
// For reporting problems, use the following
// Version = Oracle WebServices (11.1.1.0.0, build 130224.1947.04102)

public class PasseLivreSOAPClient extends WSClient<PasseLivre> {
    @WebServiceRef
    private PasseLivre_Service passeLivre_Service;
    private static PasseLivreSOAPClient obj;

    private PasseLivreSOAPClient() {
        super();
    }

    public static PasseLivreSOAPClient getInstance() {
        if (obj == null) {
            obj = new PasseLivreSOAPClient();
        }

        return obj;
    }

    public String cadastrarPasseLivre(CategoriaCarteiraPasseLivre categoriaPasseLivre,
                                      String cpf,
                                      TipoCarteiraPasseLivre tipoCarteiraPasseLivre) {

        ParametroCadastrarPasseLivre parameters =
            new ParametroCadastrarPasseLivre();
        parameters.setCategoriaPasseLivre(categoriaPasseLivre);
        parameters.setCodigoCpf(cpf);
        parameters.setTipoPasseLivre(tipoCarteiraPasseLivre);
        ResultadoCadastrarPasseLivre resultado =
            new ResultadoCadastrarPasseLivre();

        try {
            resultado =
                    getPort().cadastrarPasseLivre(parameters, RequestFixo.cabecalho());
        } catch (ErroInfoMessage e) {
            JSFUtils.addFacesErrorMessage("Erro ao tentar utilizar o serviço " + this.getClass().getSimpleName() + ":" + e.getMessage());
        } catch (Exception e) {
            JSFUtils.addFacesErrorMessage(erroGenerico(e));
        }

        return resultado.getResultado();
    }

    public String cancelarPasseLivre(long numeroCarteira) {

        ParametroCancelarPasseLivre parameters =
            new ParametroCancelarPasseLivre();
        parameters.setNumeroCarteira(BigInteger.valueOf(numeroCarteira));

        ResultadoCancelarPasseLivre resultado =
            new ResultadoCancelarPasseLivre();

        try {
            resultado =
                    getPort().cancelarPasseLivre(parameters, RequestFixo.cabecalho());
        } catch (ErroInfoMessage e) {
            JSFUtils.addFacesErrorMessage("Erro ao tentar utilizar o serviço " + this.getClass().getSimpleName() + ":" + e.getMessage());
        } catch (Exception e) {
            JSFUtils.addFacesErrorMessage(erroGenerico(e));
        }
        return resultado.getResultado();
    }

    public List<CarteiraPasseLivre> consultarPasseLivre(String cpf,
                                                        CarteiraIdentidade rg) {

        ParametroConsultarPasseLivre parameters =
            new ParametroConsultarPasseLivre();
        parameters.setCodigoCpf(cpf);
        parameters.setCodigoRG(rg);

        List<CarteiraPasseLivre> lista = new ArrayList<CarteiraPasseLivre>();

        try {
            ResultadoConsultarPasseLivre resultado =
                getPort().consultarPasseLivre(parameters,
                                              RequestFixo.cabecalho());
            
            lista = resultado.getCarteiraPasseLivre();
            
        } catch (ErroInfoMessage e) {
            JSFUtils.addFacesErrorMessage("Erro ao tentar utilizar o serviço " + this.getClass().getSimpleName() + ":" + e.getMessage());
        } catch (Exception e) {
            JSFUtils.addFacesErrorMessage(erroGenerico(e));
        }
        return lista;
    }

    public PasseLivre criarPortType() {

        passeLivre_Service = new PasseLivre_Service();
        PasseLivre port = passeLivre_Service.getPasseLivreSOAP();

        return port;
    }
}
